﻿using System;
using System.Collections.Generic;
using System.Web.UI;
using SisEagle.IView.Produtos;
using System.Data;
using SisEagle.Common.Code;
using SisEagle.View.Web.Base;
using SisEagleVO;

namespace SisEagle.View.Web.Produto
{
    public partial class Produto : Base.WebPageBase, IProdutoView
    {
        int count = 0;
        #region Singleton
        private SisEagleBO.ProdutosBO _ProdutosBusiness;
        private SisEagleBO.ProdutosBO ProdutosBusiness
        {
            get
            {
                if (_ProdutosBusiness == null)
                    _ProdutosBusiness = new SisEagleBO.ProdutosBO();

                return _ProdutosBusiness;
            }
        }


        private SisEagleBO.ImagensBO _ImagensBusiness;
        private SisEagleBO.ImagensBO ImagensBusiness
        {
            get
            {
                if (_ImagensBusiness == null)
                    _ImagensBusiness = new SisEagleBO.ImagensBO();

                return _ImagensBusiness;
            }
        }

        #endregion

        #region Page-Load/OnInit

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            PaginaAtual = "~/Produto/Produto.aspx";
            PaginaLista = "~/Produto/Produtos.aspx";
            initialize();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                // Verifica se esta editando um registro
                if (Request.ExisteId())
                {
                    if (!Request.GetIdToInt().Equals(0))
                    {
                        DataSet ProdutosData = ProdutosBusiness.FindBy_CodProduto(Request.GetIdToInt());
                        var produtosEntity = ProdutosData.Tables["Produtos"];

                        // Quando a entidade não for encontrada retorna a mensagem de registro não encontrado
                        if (produtosEntity == null)
                        {
                            return;
                        }
                        Acao = ActionData.Update;

                        SetView(produtosEntity);

                        SisEagleVO.ImagensVO objImagensVO = new ImagensVO();

                        objImagensVO = ImagensBusiness.PegaImagemProduto(Request.GetIdToInt().ToString());

                        if (objImagensVO.Imagem.ToString().Length > 0)
                        {
                            imgProduto.ImageUrl = "~/Uploads/" + objImagensVO.Imagem;
                        }
                        else
                        {
                            imgProduto.ImageUrl = "~/Uploads/sem_imagem.jpg";
                        }
                    }
                }
                // Criando um novo registro
                else
                {

                    NovosDados();

                }
            }
        }

        private void initialize()
        {
            UcbotoesCadastro.BotaoSalvar.Click += (BotaoSalvar_Click);
            UcbotoesCadastro.BotaoNovo.Click += (BotaoNovo_Click);
            UcbotoesCadastro.BotaoExcluir.Click += (BotaoExcluir_Click);
            UcbotoesCadastro.BotaoSalvarFechar.Click += (BotaoSalvarFechar_Click);
            UcbotoesCadastro.BotaoExcluir.Click += (BotaoExcluir_Click);
            UcbotoesCadastro.BotaoCancelar.Click += (s, ev) => Response.Redirect(PaginaLista, false);
        }

        protected void imgProduto_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("Imagens.aspx?codProduto=" + txtCodigo.Text);        
        }



        #endregion

        #region Acoes Botoes

        private void BotaoNovo_Click(object sender, ImageClickEventArgs e)
        {
            RedirecionaSalvar = Redirecionamento.PaginaAtual;
            SalvarDados();
            NovosDados();
            limpartela();
        }




        private void BotaoSalvarFechar_Click(object sender, ImageClickEventArgs e)
        {
            RedirecionaSalvar = Redirecionamento.PaginaLista;
            SalvarDados();
            Response.Redirect(PaginaLista, false);
        }

        private void BotaoExcluir_Click(object sender, ImageClickEventArgs e)
        {

            if (count > 0)
                return;
            RedirecionaSalvar = Redirecionamento.PaginaLista;
            Acao = ActionData.Delete;
            SalvarDados();
            NovosDados();
            count++;
        }

        private void BotaoSalvar_Click(object sender, ImageClickEventArgs e)
        {
            RedirecionaSalvar = Redirecionamento.NaoRedirecionar;
            SalvarDados();
            NovosDados();
        }

        #endregion Acoes Botoes

        #region Binding
        public int CodProduto
        {
            get
            {
                if (string.IsNullOrEmpty(txtCodigo.Text) || !(UtilsNumber.IsNumber(txtCodigo.Text)))
                {
                    return 0;
                }
                else
                    return Convert.ToInt32(txtCodigo.Text);

            }
            set
            {
                txtCodigo.Text = value.ToString();
            }
        }

        public string NomeProduto
        {
            get
            {
                if (string.IsNullOrEmpty(txtNomeProduto.Text))
                    return string.Empty;

                else
                    return txtNomeProduto.Text.TrimStart();
            }
            set
            {

                txtNomeProduto.Text = value;
            }
        }

        public string Descricao
        {
            get
            {
                if (string.IsNullOrEmpty(txtDescricao.Text))
                    return string.Empty;

                else
                    return txtDescricao.Text.TrimStart();
            }
            set
            {

                txtDescricao.Text = value;
            }
        }

        public decimal ValorCompra
        {
            get
            {
                if (string.IsNullOrEmpty(txtValorCompra.Text))
                    return 0;

                else
                    return Convert.ToDecimal(txtValorCompra.Text);
            }
            set
            {

                txtValorCompra.Text = value.ToString();
            }
        }

        public decimal ValorVenda
        {
            get
            {
                if (string.IsNullOrEmpty(txtValorVenda.Text))
                    return 0;

                else
                    return Convert.ToDecimal(txtValorVenda.Text);
            }
            set
            {
                txtValorVenda.Text = value.ToString();
            }
        }


        public decimal MargemLucro
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }
        

        public int CodCategoria
        {
            get
            {
                if (string.IsNullOrEmpty(UcCmbCategorias.ComboCategorias.SelectedValue) || !(UtilsNumber.IsNumber(UcCmbCategorias.ComboCategorias.SelectedValue)))
                {
                    return 0;
                }
                else
                    return Convert.ToInt32(UcCmbCategorias.ComboCategorias.SelectedValue);

            }
            set
            {
                UcCmbCategorias.ComboCategorias.SelectedValue = value.ToString();
            }
        }

        public List<Mensagem> Mensagens
        {
            set
            {
                UcbotoesCadastro.AddMensagem(value);
                Redireciona(UcbotoesCadastro.HasError);
            }
        }

        private ActionData _Acao;
        [SaveInViewState]
        public ActionData Acao
        {
            get
            {
                return _Acao;
            }
            set
            {
                _Acao = value;
                UcbotoesCadastro.SetAcao(value);

            }
        }
        #endregion

        #region SetView - GetView - Novo

        private void SetView(DataTable ComprasEntity)
        {
            CodProduto = (ComprasEntity.Rows[0]["CodProduto"]).ToInt32();
            NomeProduto = (ComprasEntity.Rows[0]["NomeProduto"]).ToString();
            Descricao = (ComprasEntity.Rows[0]["Descricao"]).ToString();
            ValorCompra = Convert.ToDecimal(ComprasEntity.Rows[0]["Valor_Compra"]);
            ValorVenda = Convert.ToDecimal(ComprasEntity.Rows[0]["Valor_Venda"]);
            CodCategoria = (ComprasEntity.Rows[0]["codCategoria"]).ToInt32();
            //MargemLucro = Convert.ToDecimal(ComprasEntity.Rows[0]["MargemLucro"]);
        }

        private ProdutosVO GetView()
        {
            return new ProdutosVO
            {
                CodProduto = CodProduto,
                NomeProduto = NomeProduto,
                Descricao = Descricao,
                Valor_Compra = ValorCompra,
                Valor_Venda = ValorVenda,
                codCategoria = CodCategoria,
               // MargemLucro = MargemLucro


            };

        }

        private void NovosDados()
        {
            Acao = ActionData.New;
        }

        private void limpartela()
        {
            txtCodigo.Text = string.Empty;
            txtNomeProduto.Text = string.Empty;
            txtValorCompra.Text = string.Empty;
            txtValorVenda.Text = string.Empty;

        }


        #endregion

        #region Crud
        private void SalvarDados()
        {

            int controlador = 0;
            //Instancia da entidade que sera Salva
            SisEagleVO.ProdutosVO ProdutosEntity = new SisEagleVO.ProdutosVO();

            //Busca os dados da view
            ProdutosEntity = GetView();

            switch (Acao)
            {

                case ActionData.New: controlador = ProdutosBusiness.Insert(ProdutosEntity);
                    break;
                case ActionData.Update: controlador = ProdutosBusiness.Update(ProdutosEntity);
                    break;
                case ActionData.Delete: controlador = ProdutosBusiness.Delete(ProdutosEntity);
                    break;
                case ActionData.None:
                default:
                    break;

            }
            MonstraMensagem(controlador, Acao);
        }

        #endregion Crud

        #region Mensagem
        public void MonstraMensagem(int controlador, ActionData Acao)
        {
            if ((controlador == 1) && (Acao == ActionData.New))
            {
                UcbotoesCadastro.AdicionaMensagem("Registro salvo com sucesso!", MensagemTipo.Aviso);
            }
            if ((controlador == 1) && (Acao == ActionData.Update))
            {
                UcbotoesCadastro.AdicionaMensagem("Registro alterado com sucesso!", MensagemTipo.Aviso);
            }
            if ((controlador == 1) && (Acao == ActionData.Delete))
            {
                UcbotoesCadastro.AdicionaMensagem("Registro deletado com sucesso!", MensagemTipo.Aviso);
            }
        }

        #endregion

    }
}